home *** CD-ROM | disk | FTP | other *** search
/ CD ROM Paradise Collection 4 / CD ROM Paradise Collection 4 1995 Nov.iso / program / swagd_f.zip / DOS.SWG / 0062_Additions to ENHDOS.pas < prev    next >
Pascal/Delphi Source File  |  1994-08-24  |  6KB  |  196 lines

  1.  
  2. function PathTest(Pth:pchar):word;
  3. assembler;
  4. asm
  5.         CLD;    LES DI,Pth
  6.         XOR     AX,AX
  7.         MOV     CX,0FFFFH
  8.         REPNE   SCASB; NOT CX; JCXZ @NoAst; DEC DI; MOV DX,DI; STD
  9.         MOV     BX,CX; MOV SI,DI; MOV AL,'.'; REPNE SCASB; JNE @U
  10.         OR      AH,fcExtension
  11.         INC     DI; MOV DX,DI
  12. @U:     MOV     CX,BX; MOV DI,SI; MOV AL,'\'; REPNE SCASB; JE  @F
  13.         MOV     CX,BX; MOV DI,SI; MOV AL,':'; REPNE SCASB; JNE @G
  14. @F:     INC     DI
  15. @G:     INC     DI
  16.         CMP     DX,DI; JE @NoNam
  17.         OR      AH,fcFileName
  18. @NoNam: MOV     CX,BX; MOV DI,SI; MOV AL,'\'; REPNE SCASB; JNE @NoPth
  19.         OR      AH,fcDirectory
  20. @NoPth: MOV     CX,BX; MOV DI,SI; MOV AL,':'; REPNE SCASB; JNE @NoDrv
  21.         OR      AH,fcDrive
  22. @NoDrv: MOV     CX,BX; MOV DI,SI; MOV AL,'?'; REPNE SCASB; JNE @NoQst
  23.         OR      AH,fcWildcards
  24. @NoQst: MOV     CX,BX; MOV DI,SI; MOV AL,'*'; REPNE SCASB; JNE @NoAst
  25.         OR      AH,fcWildcards
  26. @NoAst: MOV     AL,AH
  27.         XOR     AH,AH
  28. end;
  29.  
  30. function PathBuild(Dst,Pth,Nam,Ext:PChar):PChar;
  31. assembler;
  32. asm
  33.  CLD
  34.  PUSH    DS
  35.  XOR     AL,AL
  36.         XOR     CX,CX;  LES   DI,Ext
  37.         MOV     DX,ES;  AND   DX,DX; JE   @NoExt
  38.         DEC     CX;     REPNE SCASB;
  39.         NOT     CX;     DEC   CX
  40. @NoExt: PUSH    CX
  41.         XOR     CX,CX;  LES   DI,Nam
  42.         MOV     DX,ES;  AND   DX,DX; JE   @NoNam
  43.         DEC     CX;     REPNE SCASB
  44.         NOT     CX;     DEC   CX
  45. @NoNam: PUSH    CX
  46.         XOR     CX,CX;  LES   DI,Pth
  47.         MOV     DX,ES;  AND   DX,DX; JE   @NoPth
  48.         DEC     CX;     REPNE SCASB
  49.         NOT     CX;     DEC   CX
  50. @NoPth:
  51.  LES     DI,Dst
  52.  MOV     BX,DI
  53.  LDS     SI,Pth
  54.         REP     MOVSB
  55.  LDS     SI,Nam
  56.         POP     CX
  57.         REP     MOVSB
  58.  LDS     SI,Ext
  59.         POP     CX
  60.         REP     MOVSB
  61.         STOSB
  62.         MOV     DX,ES
  63.  MOV     AX,BX
  64.  POP     DS
  65. end;
  66.  
  67. procedure PathSplit(Pth,Dir,Nam,Ext:pchar);
  68. assembler;
  69. asm
  70.         PUSH    DS
  71.         LES     DI,Pth; CLD
  72.         MOV     CX,0FFFFH
  73.         XOR     AL,AL; REPNE SCASB; NOT CX; DEC DI; MOV BX,DI; STD
  74.         MOV     SI,CX; MOV DX,DI; MOV AL,'.'; REPNE SCASB; JNE @U
  75.         INC     DI; MOV BX,DI
  76. @U:     MOV     CX,SI; MOV DI,DX; MOV AL,'\'; REPNE SCASB; JE  @F
  77.         MOV     CX,SI; MOV DI,DX; MOV AL,':'; REPNE SCASB; JNE @G
  78. @F:     INC     DI
  79. @G:     INC     DI
  80.         LDS     SI,Pth; CLD
  81.         MOV     CX,fsDirectory
  82.         SUB     DI,SI;  CMP DI,CX; JA @3; XCHG DI,CX
  83. @3:     LES     DI,Dir; MOV AX,ES; AND AX,AX; JE @NoDir
  84.         REP     MOVSB;  XOR AL,AL; STOSB
  85. @NoDir: ADD     SI,CX
  86.         MOV     CX,fsFilename
  87.         MOV     AX,BX;  SUB AX,SI; CMP AX,CX; JA @4; XCHG AX,CX
  88. @4:     LES     DI,Nam; MOV AX,ES; AND AX,AX; JE @NoNam
  89.         REP     MOVSB;  XOR AL,AL; STOSB
  90. @NoNam: ADD     SI,CX
  91.         MOV     CX,fsExtension
  92.         MOV     AX,DX;  SUB AX,SI; CMP AX,CX; JA @5; XCHG AX,CX
  93. @5:     LES     DI,Ext; MOV AX,ES; AND AX,AX; JE @NoExt
  94.         REP     MOVSB;  XOR AL,AL; STOSB
  95. @NoExt: POP     DS
  96. end;
  97.  
  98. procedure PathSplitName(Pth,Dir,NamExt:pchar);
  99. assembler;
  100. asm
  101.         PUSH    DS
  102.         LES     DI,Pth; CLD
  103.         MOV     CX,0FFFFH
  104.         XOR     AL,AL; REPNE SCASB; NOT CX; DEC DI; STD
  105.         MOV     SI,CX; MOV BX,DI; MOV AL,'\'; REPNE SCASB; JE  @F
  106.         MOV     CX,SI; MOV DI,BX; MOV AL,':'; REPNE SCASB; JNE @G
  107. @F:     INC     DI
  108. @G:     INC     DI
  109.         LDS     SI,Pth; CLD
  110.         MOV     CX,fsDirectory
  111.         SUB     DI,SI;  CMP DI,CX; JA @3; XCHG DI,CX
  112. @3:     LES     DI,Dir; MOV AX,ES; AND AX,AX; JE @NoDir
  113.         REP     MOVSB;  XOR AL,AL; STOSB
  114. @NoDir: ADD     SI,CX
  115.         MOV     CX,fsFilename+fsExtension
  116.         MOV     AX,BX;  SUB AX,SI; CMP AX,CX; JA @4; XCHG AX,CX
  117. @4:     LES     DI,NamExt; MOV AX,ES; AND AX,AX; JE @NoNam
  118.         REP     MOVSB;  XOR AL,AL; STOSB
  119. @NoNam: POP     DS
  120. end;
  121.  
  122. {
  123. Is't a pitty you did not include some cacheable reads/writes in your unit
  124. ENHDOS. Also some functions could be included using USES windos. (Or my own
  125. bputils ;-) Here's some cacheable stuff (also protected mode).
  126. }
  127.  
  128. function fLargeRead(Handle:word;MemPtr:pointer;Size:longint):longint;
  129. {read Size bytes from a file to Seg:0, return bytes read}
  130. assembler;
  131. var Sg:word absolute Handle;
  132. asm
  133.         PUSH    DS
  134.         MOV     CX,$8000
  135.         MOV     BX,Handle
  136.         MOV     AX,SelectorInc
  137.         MOV     DI,Size.word[2]
  138.         MOV     SI,Size.word[0]
  139.         MOV     Sg,AX
  140.         LDS     DX,MemPtr
  141.         AND     DX,DX; JE @St
  142.         MOV     AX,267
  143. @Er:    {Halt(error)}
  144.         POP     DS
  145.         PUSH    AX
  146.         CALL    bpHaltNr
  147. @Re:    AND     DI,DI;  JNE @Do
  148.         CMP     SI,CX;  JA  @Do;   MOV CX,SI
  149. @Do:    MOV     AH,$3F; INT 21H;   JC @Er
  150.         SUB     SI,AX;  SBB DI,0
  151.         SUB     AX,CX;  JNE @Eo
  152.         ADD     DX,CX;  JNC @St
  153.         MOV     AX,DS;  ADD AX,Sg; MOV DS,AX
  154. @St:    MOV     AX,DI;  XOR AX,SI; JNE @Re
  155. @Eo:    POP     DS
  156.         MOV     AX,Size.word[0]; SUB AX,SI
  157.         MOV     DX,Size.word[2]; SBB DX,DI
  158. @eX:
  159. end;
  160.  
  161.  
  162. function fLargeWrite(Handle:word;MemPtr:pointer;Size:longint):longint;
  163. {write Size bytes to a file from Seg:0, return bytes written}
  164. assembler;
  165. var Sg:word absolute Handle;
  166. asm
  167.         PUSH    DS
  168.         MOV     CX,$8000
  169.         MOV     BX,Handle
  170.         MOV     AX,SelectorInc
  171.         MOV     DI,Size.word[2]
  172.         MOV     SI,Size.word[0]
  173.         MOV     Sg,AX
  174.         LDS     DX,MemPtr
  175.         AND     DX,DX; JE @St
  176.         MOV     AX,267
  177.         JMP     @Er
  178. @Wr:    MOV     AX,101
  179. @Er:    {Halt(error)}
  180.         POP     DS
  181.         PUSH    AX
  182.         CALL    bpHaltNr
  183. @Re:    AND     DI,DI;  JNE @Do
  184.         CMP     SI,CX;  JA  @Do;   MOV CX,SI
  185. @Do:    MOV     AH,$40; INT 21H;   JC @Er
  186.         SUB     SI,AX;  SBB DI,0
  187.         SUB     AX,CX;  JNE @Wr
  188.         ADD     DX,CX;  JNC @St
  189.         MOV     AX,DS;  ADD AX,Sg; MOV DS,AX
  190. @St:    MOV     AX,DI;  XOR AX,SI; JNE @Re
  191. @Eo:    POP     DS
  192.         MOV     AX,Size.word[0]; SUB AX,SI
  193.         MOV     DX,Size.word[2]; SBB DX,DI
  194. @eX:
  195. end;
  196.